package com.ww.java.generic;

public class GenericTest {

    /**
     * 泛型类
     * @param <T>
     */
    public class Generic<T> {
        private T key;

        public Generic(T key) {
            this.key = key;
        }

        public T getKey() {
            return key;
        }

        /**
         * 这才是一个真正的泛型方法
         * 首先在public与返回值之间的<T>必不可少，这表明这是一个泛型方法，并且声明了一个泛型T
         * 这个T可以出现在这个泛型方法的任意位置
         * 泛型的数量也可以为任意多个
         * @param container
         * @return
         * @param <T>
         */
        @SuppressWarnings("hiding")
		public <T> T showKeyName(Generic<T> container) {
            System.out.println("container key: " + container.getKey());
            T t = container.getKey();
            return t;
        }

        /**
         * 这也不是一个泛型方法，只是一个普通的方法
         * @param obj
         */
        public void showKeyValue1(Generic<Number> obj) {
            System.out.println("泛型测试，key value is " + obj.getKey());
        }
    }
}
